iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
1
自我挑戰組

golang leetcode 30天挑戰系列 第 1

golang leetcode 30天挑戰賽 first day - running sum of 1d array

  • 分享至 

  • xImage
  •  

golang leetcode 30天挑戰賽 first day

目的

為了讓自己熟悉golang 語法

打算找從leetcode中 找出30 level為 easy的題目 來做練習解題

訓練目標

1 解讀問題的能力

2 表達解法的能力

具體撰寫內容

預計在每篇文章 寫出以下結構

1 題目的解讀

2 初步解法的邏輯

3 遇到的困難

4 測資的撰寫

5 參考的素材

以下進入第一天要解的題目

running sum of 1d array

題目解讀

題目來源

running-sum-of-1d-array

原文

Given an array nums. We define a running sum of an array as runningSum[i] = sum(nums[0]…nums[i]).

Return the running sum of nums.

解讀

給予一個元素型別是正整數的陣列 nums

回傳一個元素型別是正整數的陣列 runningSum

每個元素符合以下特性:

位於index i 的元素runningSum[i]的值

是前i個元素的和

初步的解法

初步觀察:

先觀察結果array

其中

array[i] = array[i-1] + nums[i]

所以可以利用

在loop nums的時候

順便計算出每個array element

初步設計:

let accum as integer with value 0

let returnSums as integer array with size of nums

loop nums with index i:

accum += nums[i]

returnSums[i] = accum

return returnSums

my solution source code

running sum of 1d array

package running_sum

func runningSum(nums []int) []int {
	ret := make([]int, len(nums))
	accum := 0
	for idx, val := range nums {
		accum += val
		ret[idx] = accum
	}
	return ret
}

遇到的困難

pseudo code撰寫

一開始不習慣把pseudo code寫下來

因此 不太容易把自己的code做解析

golang table driven test不熟

對於table driven test還不太熟析

所以對於寫test還是耗費不少時間

測資的撰寫

golang本身有一個很好的測試package testing

加上reflect還好有vscode的快捷鍵

在寫好程式碼之後右鍵建立Unit test for function就會自動產生 template

如下:

package running_sum

import (
	"reflect"
	"testing"
)

func Test_runningSum(t *testing.T) {
	type args struct {
		nums []int
	}
	tests := []struct {
		name string
		args args
		want []int
	}{
		{
			name: "Example1",
			args: args{
				nums: []int{1, 2, 3, 4},
			},
			want: []int{1, 3, 6, 10},
		},
		{
			name: "Example2",
			args: args{
				nums: []int{1, 1, 1, 1, 1},
			},
			want: []int{1, 2, 3, 4, 5},
		},
		{
			name: "Example3",
			args: args{
				nums: []int{3, 1, 2, 10, 1},
			},
			want: []int{3, 4, 6, 16, 17},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := runningSum(tt.args.nums); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("runningSum() = %v, want %v", got, tt.want)
			}
		})
	}
}

參考文章

golang test撰寫


下一篇
golang leetcode 30天挑戰 second day challenge shuffle the array
系列文
golang leetcode 30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言